/*
 * Copyright (c) 2018 Tencent. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
const AbstractModel = require("../../common/abstract_model");

/**
 * Page screenshot information
 * @class
 */
class PageScreenVO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Screenshot Base64 or URL.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Content = null;

        /**
         * Component ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WidgetId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Content = 'Content' in params ? params.Content : null;
        this.WidgetId = 'WidgetId' in params ? params.WidgetId : null;

    }
}

/**
 * Data ID
 * @class
 */
class DataId extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * DescribeUserRoleList response structure.
 * @class
 */
class DescribeUserRoleListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Extension description information (providing more exception messages for auxiliary judgment).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {UserRoleListData || null}
         */
        this.Data = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new UserRoleListData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExportScreenPage response structure.
 * @class
 */
class ExportScreenPageResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Extension parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Returned data results.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {PageScreenListVO || null}
         */
        this.Data = null;

        /**
         * Response message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new PageScreenListVO();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyProject response structure.
 * @class
 */
class ModifyProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Returned data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteProject request structure.
 * @class
 */
class DeleteProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Random number.
         * @type {string || null}
         */
        this.Seed = null;

        /**
         * Default dashboard.
         * @type {number || null}
         */
        this.DefaultPanelType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Seed = 'Seed' in params ? params.Seed : null;
        this.DefaultPanelType = 'DefaultPanelType' in params ? params.DefaultPanelType : null;

    }
}

/**
 * DescribeUserProjectList response structure.
 * @class
 */
class DescribeUserProjectListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {CorpUserListData || null}
         */
        this.Data = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }

        if (params.Data) {
            let obj = new CorpUserListData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDatasource request structure.
 * @class
 */
class CreateDatasourceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * HOST
         * @type {string || null}
         */
        this.DbHost = null;

        /**
         * Port.
         * @type {number || null}
         */
        this.DbPort = null;

        /**
         * The backend provides dictionaries: domain type. 1. Tencent Cloud, 2. local.
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * Drive.
         * @type {string || null}
         */
        this.DbType = null;

        /**
         * Database encoding.
         * @type {string || null}
         */
        this.Charset = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.DbUser = null;

        /**
         * Password.
         * @type {string || null}
         */
        this.DbPwd = null;

        /**
         * Database name.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Database alias.
         * @type {string || null}
         */
        this.SourceName = null;

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Catalog value.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Third-party data source identifier.
         * @type {string || null}
         */
        this.DataOrigin = null;

        /**
         * Third-party project ID.
         * @type {string || null}
         */
        this.DataOriginProjectId = null;

        /**
         * Third-party data source ID.
         * @type {string || null}
         */
        this.DataOriginDatasourceId = null;

        /**
         * Extension parameter.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * Unified identifier of the Tencent Cloud VPC.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * VPC IP address.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * VPC port.
         * @type {string || null}
         */
        this.Vport = null;

        /**
         * Tencent Cloud VPC identifier.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Operation permission limitation.
         * @type {Array.<string> || null}
         */
        this.OperationAuthLimit = null;

        /**
         * Enables VPC.
         * @type {boolean || null}
         */
        this.UseVPC = null;

        /**
         * Region.
         * @type {string || null}
         */
        this.RegionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbHost = 'DbHost' in params ? params.DbHost : null;
        this.DbPort = 'DbPort' in params ? params.DbPort : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;
        this.DbType = 'DbType' in params ? params.DbType : null;
        this.Charset = 'Charset' in params ? params.Charset : null;
        this.DbUser = 'DbUser' in params ? params.DbUser : null;
        this.DbPwd = 'DbPwd' in params ? params.DbPwd : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SourceName = 'SourceName' in params ? params.SourceName : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.DataOrigin = 'DataOrigin' in params ? params.DataOrigin : null;
        this.DataOriginProjectId = 'DataOriginProjectId' in params ? params.DataOriginProjectId : null;
        this.DataOriginDatasourceId = 'DataOriginDatasourceId' in params ? params.DataOriginDatasourceId : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.OperationAuthLimit = 'OperationAuthLimit' in params ? params.OperationAuthLimit : null;
        this.UseVPC = 'UseVPC' in params ? params.UseVPC : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

    }
}

/**
 * DeleteDatasource request structure.
 * @class
 */
class DeleteDatasourceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data source ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;

    }
}

/**
 * ModifyDatasource response structure.
 * @class
 */
class ModifyDatasourceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * None.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Prompt.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Role information of the user role list
 * @class
 */
class UserRoleListDataRoleInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Role Name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RoleName = null;

        /**
         * Role ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.RoleId = null;

        /**
         * Project ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Project name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectName = null;

        /**
         * Whether it is a global role (0: no; 1: yes).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ScopeType = null;

        /**
         * Role key.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModuleCollection = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoleName = 'RoleName' in params ? params.RoleName : null;
        this.RoleId = 'RoleId' in params ? params.RoleId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.ProjectName = 'ProjectName' in params ? params.ProjectName : null;
        this.ScopeType = 'ScopeType' in params ? params.ScopeType : null;
        this.ModuleCollection = 'ModuleCollection' in params ? params.ModuleCollection : null;

    }
}

/**
 * ApplyEmbedInterval request structure.
 * @class
 */
class ApplyEmbedIntervalRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Shares the project ID. Required.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Shares the page ID. This field is empty (0) for embedding a dashboard and is not passed for embedding ChatBI.

         * @type {number || null}
         */
        this.PageId = null;

        /**
         * Token requiring extension.
         * @type {string || null}
         */
        this.BIToken = null;

        /**
         * Alternate field.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * embed: page/dashboard embedding.
chatBIEmbed: ChatBI embedding.
         * @type {string || null}
         */
        this.Intention = null;

        /**
         * panel: dashboard; page: page.
project, during ChatBI embedding.
         * @type {string || null}
         */
        this.Scope = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.PageId = 'PageId' in params ? params.PageId : null;
        this.BIToken = 'BIToken' in params ? params.BIToken : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.Intention = 'Intention' in params ? params.Intention : null;
        this.Scope = 'Scope' in params ? params.Scope : null;

    }
}

/**
 * Customized query
 * @class
 */
class ProjectConfigResult extends  AbstractModel {
    constructor(){
        super();

        /**
         * Configuration name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModuleId = null;

        /**
         * Configuration mode.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IncludeType = null;

        /**
         * Additional parameters.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Params = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModuleId = 'ModuleId' in params ? params.ModuleId : null;
        this.IncludeType = 'IncludeType' in params ? params.IncludeType : null;
        this.Params = 'Params' in params ? params.Params : null;

    }
}

/**
 * Report embedding data structure with strong authentication
 * @class
 */
class EmbedTokenInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Information identifier.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Token.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.BIToken = null;

        /**
         * Project ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Creator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedUser = null;

        /**
         * Creation time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Updater.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedUser = null;

        /**
         * Update time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Page ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PageId = null;

        /**
         * Backup.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * Embedding type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Scope = null;

        /**
         * Expiration time (in minutes), with a maximum value of 240.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ExpireTime = null;

        /**
         * User enterprise ID (only used for multi-user).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserCorpId = null;

        /**
         * User ID (only used for multi-user).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Access count limit (range: 1–99999). Leave empty to disable access restrictions.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TicketNum = null;

        /**
         * Global parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GlobalParam = null;

        /**
         * "embed" indicates page dashboard embedding, and "chatBIEmbed" indicates ChatBI embedding.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Intention = null;

        /**
         * 100: no bound user.
200: single token per user.
300: multiple tokens per user.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TokenType = null;

        /**
         * Number of tokens.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TokenNum = null;

        /**
         * Whether it is multiple tokens per user.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.SingleUserMultiToken = null;

        /**
         * Embedded display configurations: Currently for ChatBI embedding scenarios; TableFilter represents data table list filtering, SqlView represents SQL view feature.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConfigParam = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.BIToken = 'BIToken' in params ? params.BIToken : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.CreatedUser = 'CreatedUser' in params ? params.CreatedUser : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedUser = 'UpdatedUser' in params ? params.UpdatedUser : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.PageId = 'PageId' in params ? params.PageId : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.Scope = 'Scope' in params ? params.Scope : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.UserCorpId = 'UserCorpId' in params ? params.UserCorpId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.TicketNum = 'TicketNum' in params ? params.TicketNum : null;
        this.GlobalParam = 'GlobalParam' in params ? params.GlobalParam : null;
        this.Intention = 'Intention' in params ? params.Intention : null;
        this.TokenType = 'TokenType' in params ? params.TokenType : null;
        this.TokenNum = 'TokenNum' in params ? params.TokenNum : null;
        this.SingleUserMultiToken = 'SingleUserMultiToken' in params ? params.SingleUserMultiToken : null;
        this.ConfigParam = 'ConfigParam' in params ? params.ConfigParam : null;

    }
}

/**
 * DescribePageWidgetList response structure.
 * @class
 */
class DescribePageWidgetListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Extension parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Returned data results.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {WidgetListVO || null}
         */
        this.Data = null;

        /**
         * Response message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new WidgetListVO();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteUserRole response structure.
 * @class
 */
class DeleteUserRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Custom error information object
 * @class
 */
class ErrorInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Error description field.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorTip = null;

        /**
         * Original exception message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorMessage = null;

        /**
         * Error level field.
ERROR
WARN
INFO
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ErrorLevel = null;

        /**
         * Documentation link.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DocLink = null;

        /**
         * Quick start guide.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.FAQ = null;

        /**
         * Reserved field 1.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ReservedField = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ErrorTip = 'ErrorTip' in params ? params.ErrorTip : null;
        this.ErrorMessage = 'ErrorMessage' in params ? params.ErrorMessage : null;
        this.ErrorLevel = 'ErrorLevel' in params ? params.ErrorLevel : null;
        this.DocLink = 'DocLink' in params ? params.DocLink : null;
        this.FAQ = 'FAQ' in params ? params.FAQ : null;
        this.ReservedField = 'ReservedField' in params ? params.ReservedField : null;

    }
}

/**
 * DescribeUserProjectList request structure.
 * @class
 */
class DescribeUserProjectListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * None.
         * @type {boolean || null}
         */
        this.AllPage = null;

        /**
         * None.
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * None.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Whether to filter out enterprise administrators.
         * @type {boolean || null}
         */
        this.IsFilterPerAuthUser = null;

        /**
         * Whether to filter out the current user.
         * @type {boolean || null}
         */
        this.IsFilterCurrentUser = null;

        /**
         * Keyword.
         * @type {string || null}
         */
        this.Keyword = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.AllPage = 'AllPage' in params ? params.AllPage : null;
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.IsFilterPerAuthUser = 'IsFilterPerAuthUser' in params ? params.IsFilterPerAuthUser : null;
        this.IsFilterCurrentUser = 'IsFilterCurrentUser' in params ? params.IsFilterCurrentUser : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;

    }
}

/**
 * DescribePageWidgetList request structure.
 * @class
 */
class DescribePageWidgetListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Page ID.
         * @type {string || null}
         */
        this.PageId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.PageId = 'PageId' in params ? params.PageId : null;

    }
}

/**
 * CreateDatasourceCloud response structure.
 * @class
 */
class CreateDatasourceCloudResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Success No.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {IdDTO || null}
         */
        this.Data = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Prompt.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }

        if (params.Data) {
            let obj = new IdDTO();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Customized query
 * @class
 */
class ProjectConfigList extends  AbstractModel {
    constructor(){
        super();

        /**
         * Module group.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModuleGroup = null;

        /**
         * Content.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ProjectConfigResult> || null}
         */
        this.Components = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModuleGroup = 'ModuleGroup' in params ? params.ModuleGroup : null;

        if (params.Components) {
            this.Components = new Array();
            for (let z in params.Components) {
                let obj = new ProjectConfigResult();
                obj.deserialize(params.Components[z]);
                this.Components.push(obj);
            }
        }

    }
}

/**
 * DeleteUserRole request structure.
 * @class
 */
class DeleteUserRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;

    }
}

/**
 * CreateUserRole request structure.
 * @class
 */
class CreateUserRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Role ID list.
         * @type {Array.<number> || null}
         */
        this.RoleIdList = null;

        /**
         * User list (deprecated).
         * @type {Array.<UserIdAndUserName> || null}
         */
        this.UserList = null;

        /**
         * User list (new).
         * @type {Array.<UserInfo> || null}
         */
        this.UserInfoList = null;

        /**
         * User group ID list.
         * @type {Array.<number> || null}
         */
        this.UserGroups = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.RoleIdList = 'RoleIdList' in params ? params.RoleIdList : null;

        if (params.UserList) {
            this.UserList = new Array();
            for (let z in params.UserList) {
                let obj = new UserIdAndUserName();
                obj.deserialize(params.UserList[z]);
                this.UserList.push(obj);
            }
        }

        if (params.UserInfoList) {
            this.UserInfoList = new Array();
            for (let z in params.UserInfoList) {
                let obj = new UserInfo();
                obj.deserialize(params.UserInfoList[z]);
                this.UserInfoList.push(obj);
            }
        }
        this.UserGroups = 'UserGroups' in params ? params.UserGroups : null;

    }
}

/**
 * User group
 * @class
 */
class UserGroupDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * id
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * User group name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GroupName = null;

        /**
         * Parent node ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ParentId = null;

        /**
         * Whether it is default.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.IsDefault = null;

        /**
         * Administrator user ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AdminUserId = null;

        /**
         * Description.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Description = null;

        /**
         * Location.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Location = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.GroupName = 'GroupName' in params ? params.GroupName : null;
        this.ParentId = 'ParentId' in params ? params.ParentId : null;
        this.IsDefault = 'IsDefault' in params ? params.IsDefault : null;
        this.AdminUserId = 'AdminUserId' in params ? params.AdminUserId : null;
        this.Description = 'Description' in params ? params.Description : null;
        this.Location = 'Location' in params ? params.Location : null;

    }
}

/**
 * ModifyUserRole request structure.
 * @class
 */
class ModifyUserRoleRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Role ID list.
         * @type {Array.<number> || null}
         */
        this.RoleIdList = null;

        /**
         * Mailbox.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Mobile number.
         * @type {string || null}
         */
        this.PhoneNumber = null;

        /**
         * Telephone country code.
         * @type {string || null}
         */
        this.AreaCode = null;

        /**
         * WeCom user ID.
         * @type {string || null}
         */
        this.AppUserId = null;

        /**
         * Whether to enable mobile phone verification code login (0: disabled, 1: enabled).
         * @type {number || null}
         */
        this.LoginSecurityStatus = null;

        /**
         * Whether to enable password expiration reminder (0: disabled, 1: enabled).
         * @type {number || null}
         */
        this.ResetPassWordTip = null;

        /**
         * Force password reset (0: disabled, 1: enabled).
         * @type {number || null}
         */
        this.ForceResetPassWord = null;

        /**
         * Password expiration reminder period: 30, 60, 90 (default), or 180 days.
         * @type {number || null}
         */
        this.PasswordExpired = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.RoleIdList = 'RoleIdList' in params ? params.RoleIdList : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.PhoneNumber = 'PhoneNumber' in params ? params.PhoneNumber : null;
        this.AreaCode = 'AreaCode' in params ? params.AreaCode : null;
        this.AppUserId = 'AppUserId' in params ? params.AppUserId : null;
        this.LoginSecurityStatus = 'LoginSecurityStatus' in params ? params.LoginSecurityStatus : null;
        this.ResetPassWordTip = 'ResetPassWordTip' in params ? params.ResetPassWordTip : null;
        this.ForceResetPassWord = 'ForceResetPassWord' in params ? params.ForceResetPassWord : null;
        this.PasswordExpired = 'PasswordExpired' in params ? params.PasswordExpired : null;

    }
}

/**
 * Data source details list
 * @class
 */
class DatasourceInfoData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Data source details list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<DatasourceInfo> || null}
         */
        this.List = null;

        /**
         * Total number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Total number of pages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalPages = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new DatasourceInfo();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.TotalPages = 'TotalPages' in params ? params.TotalPages : null;

    }
}

/**
 * DescribeProjectList response structure.
 * @class
 */
class DescribeProjectListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * API information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ProjectListData || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;

        if (params.Data) {
            let obj = new ProjectListData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Enterprise user list
 * @class
 */
class CorpUserListData extends  AbstractModel {
    constructor(){
        super();

        /**
         * List.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserIdAndUserName> || null}
         */
        this.List = null;

        /**
         * Total number.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Number of pages.
         * @type {number || null}
         */
        this.TotalPages = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new UserIdAndUserName();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.TotalPages = 'TotalPages' in params ? params.TotalPages : null;

    }
}

/**
 * Object containing only ID
 * @class
 */
class IdDTO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Request ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * key
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AccessKey = null;

        /**
         * id
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Transaction ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TranId = null;

        /**
         * Transaction status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TranStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.AccessKey = 'AccessKey' in params ? params.AccessKey : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.TranId = 'TranId' in params ? params.TranId : null;
        this.TranStatus = 'TranStatus' in params ? params.TranStatus : null;

    }
}

/**
 * ModifyUserRole response structure.
 * @class
 */
class ModifyUserRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateEmbedToken request structure.
 * @class
 */
class CreateEmbedTokenRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Shares the project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Shares the page ID. This field is empty (0) for embedding a dashboard and is not passed for embedding ChatBI.
         * @type {number || null}
         */
        this.PageId = null;

        /**
         * "embed" indicates page dashboard embedding, and "chatBIEmbed" indicates ChatBI embedding.
         * @type {string || null}
         */
        this.Intention = null;

        /**
         * "page" indicates embedding a page, "panel" indicates embedding the entire dashboard, and "project" is used for ChatBI embedding.
         * @type {string || null}
         */
        this.Scope = null;

        /**
         * Expiration time. Unit: minutes. Maximum value: 240 (namely, 4 hours). Default value: 240.
         * @type {string || null}
         */
        this.ExpireTime = null;

        /**
         * Alternate field.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * User enterprise ID (only used for multi-user).
         * @type {string || null}
         */
        this.UserCorpId = null;

        /**
         * User ID (only used for multi-user).
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Access count limit (range: 1-99999). Leave empty to disable access restrictions.
         * @type {number || null}
         */
        this.TicketNum = null;

        /**
         * Global filter parameters: Applies to all report filter criteria. Should be formatted as a JSON string.
** Currently, only character-type page parameters can be bound to global parameters.
**
[
    {
"ParamKey": "name", page parameter name.
"JoinType": "AND", // connection method. Currently, only AND is supported.
        "WhereList": [
            {
"Operator": "-neq", // operator. Refer to the following instructions.
"Value": [ action value. For a single-value array, only one value is passed.
                    "zZWJMD",
                    "ZzVGHX",
"Hunan province".
"Hebei province".
                ]
            }
        ]
    },
    {
        "ParamKey": "genderParam",
        "JoinType": "AND",
        "WhereList": [
            {
                "Operator": "-neq",
                "Value": [
"Male".
                ]
            }
        ]
    }
]



Currently supported operators.
 -neq not equal to != operator.
 -eq equal to = operator.
 -is in operator.

         * @type {string || null}
         */
        this.GlobalParam = null;

        /**
         * 100: no user bound. Create 1 token at a time. UserCorpId and UserId are optional. ChatBI embedding is not supported.
200: single token per user. Create 1 token at a time. UserCorpId and UserId required.
300: multiple tokens per user. Create multiple tokens at a time. UserCorpId and UserId required.
         * @type {number || null}
         */
        this.TokenType = null;

        /**
         * The number of tokens created at one time.
         * @type {number || null}
         */
        this.TokenNum = null;

        /**
         * Embedded display configurations: Currently for ChatBI embedding scenarios; TableFilter represents data table list filtering, SqlView represents SQL view feature.
         * @type {string || null}
         */
        this.ConfigParam = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.PageId = 'PageId' in params ? params.PageId : null;
        this.Intention = 'Intention' in params ? params.Intention : null;
        this.Scope = 'Scope' in params ? params.Scope : null;
        this.ExpireTime = 'ExpireTime' in params ? params.ExpireTime : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.UserCorpId = 'UserCorpId' in params ? params.UserCorpId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.TicketNum = 'TicketNum' in params ? params.TicketNum : null;
        this.GlobalParam = 'GlobalParam' in params ? params.GlobalParam : null;
        this.TokenType = 'TokenType' in params ? params.TokenType : null;
        this.TokenNum = 'TokenNum' in params ? params.TokenNum : null;
        this.ConfigParam = 'ConfigParam' in params ? params.ConfigParam : null;

    }
}

/**
 * CreateUserRoleProject response structure.
 * @class
 */
class CreateUserRoleProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DataId || null}
         */
        this.Data = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new DataId();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Screenshot list
 * @class
 */
class PageScreenListVO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Image export type. Valid values: Base64, and URL.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PicType = null;

        /**
         * Image list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<PageScreenVO> || null}
         */
        this.List = null;

        /**
         * Async transaction ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TranId = null;

        /**
         * Transaction status.
1: processing; 2: processing successful; 3: processing failed (error content in outer Msg).
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TranStatus = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PicType = 'PicType' in params ? params.PicType : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new PageScreenVO();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.TranId = 'TranId' in params ? params.TranId : null;
        this.TranStatus = 'TranStatus' in params ? params.TranStatus : null;

    }
}

/**
 * DescribeProjectInfo request structure.
 * @class
 */
class DescribeProjectInfoRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Default dashboard.
         * @type {number || null}
         */
        this.DefaultPanelType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.DefaultPanelType = 'DefaultPanelType' in params ? params.DefaultPanelType : null;

    }
}

/**
 * Operation attributes of every record returned by a list query
 * @class
 */
class BaseStateAction extends  AbstractModel {
    constructor(){
        super();

        /**
         * Whether the edit button is visible.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ShowEdit = null;

        /**
         * Whether the edit button is clickable.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsEdit = null;

        /**
         * Edit button text.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EditText = null;

        /**
         * Edit-disabled hint.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EditTips = null;

        /**
         * Whether the deletion button is visible.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ShowDel = null;

        /**
         * Whether the deletion button is clickable.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsDel = null;

        /**
         * Delete button text.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DelText = null;

        /**
         * Delete-disabled hint.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DelTips = null;

        /**
         * Whether the copy button is visible.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ShowCopy = null;

        /**
         * Whether it is visible.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ShowView = null;

        /**
         * Whether renaming is allowed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.ShowRename = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ShowEdit = 'ShowEdit' in params ? params.ShowEdit : null;
        this.IsEdit = 'IsEdit' in params ? params.IsEdit : null;
        this.EditText = 'EditText' in params ? params.EditText : null;
        this.EditTips = 'EditTips' in params ? params.EditTips : null;
        this.ShowDel = 'ShowDel' in params ? params.ShowDel : null;
        this.IsDel = 'IsDel' in params ? params.IsDel : null;
        this.DelText = 'DelText' in params ? params.DelText : null;
        this.DelTips = 'DelTips' in params ? params.DelTips : null;
        this.ShowCopy = 'ShowCopy' in params ? params.ShowCopy : null;
        this.ShowView = 'ShowView' in params ? params.ShowView : null;
        this.ShowRename = 'ShowRename' in params ? params.ShowRename : null;

    }
}

/**
 * Data
 * @class
 */
class Data extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.

         * @type {number || null}
         */
        this.Id = null;

        /**
         * url
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EditUrl = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.EditUrl = 'EditUrl' in params ? params.EditUrl : null;

    }
}

/**
 * ModifyUserRoleProject response structure.
 * @class
 */
class ModifyUserRoleProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeUserRoleProjectList response structure.
 * @class
 */
class DescribeUserRoleProjectListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {UserRoleListData || null}
         */
        this.Data = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new UserRoleListData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDatasourceCloud response structure.
 * @class
 */
class ModifyDatasourceCloudResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Success No.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Prompt.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ModifyDatasourceCloud request structure.
 * @class
 */
class ModifyDatasourceCloudRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The backend provides dictionaries: domain type. 1: Tencent Cloud; 2: local.
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * Drive.
         * @type {string || null}
         */
        this.DbType = null;

        /**
         * Database encoding.
         * @type {string || null}
         */
        this.Charset = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.DbUser = null;

        /**
         * Password.
         * @type {string || null}
         */
        this.DbPwd = null;

        /**
         * Database name.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Database alias.
         * @type {string || null}
         */
        this.SourceName = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Primary key.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Private network IP address of the public cloud.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Private network port of the public cloud.
         * @type {string || null}
         */
        this.Vport = null;

        /**
         * VPC identifier.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Unified VPC identifier.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * Region identifier (gz, bj).
         * @type {string || null}
         */
        this.RegionId = null;

        /**
         * Extension parameter.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Product name of the data source.
         * @type {string || null}
         */
        this.ProdDbName = null;

        /**
         * Third-party data source identifier.
         * @type {string || null}
         */
        this.DataOrigin = null;

        /**
         * Third-party project ID.
         * @type {string || null}
         */
        this.DataOriginProjectId = null;

        /**
         * Third-party data source ID.
         * @type {string || null}
         */
        this.DataOriginDatasourceId = null;

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.ClusterId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;
        this.DbType = 'DbType' in params ? params.DbType : null;
        this.Charset = 'Charset' in params ? params.Charset : null;
        this.DbUser = 'DbUser' in params ? params.DbUser : null;
        this.DbPwd = 'DbPwd' in params ? params.DbPwd : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SourceName = 'SourceName' in params ? params.SourceName : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ProdDbName = 'ProdDbName' in params ? params.ProdDbName : null;
        this.DataOrigin = 'DataOrigin' in params ? params.DataOrigin : null;
        this.DataOriginProjectId = 'DataOriginProjectId' in params ? params.DataOriginProjectId : null;
        this.DataOriginDatasourceId = 'DataOriginDatasourceId' in params ? params.DataOriginDatasourceId : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;

    }
}

/**
 * ModifyDatasource request structure.
 * @class
 */
class ModifyDatasourceRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * HOST
         * @type {string || null}
         */
        this.DbHost = null;

        /**
         * Port.
         * @type {number || null}
         */
        this.DbPort = null;

        /**
         * The backend provides dictionaries: domain type. 1: Tencent Cloud; 2: local.
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * Drive.
         * @type {string || null}
         */
        this.DbType = null;

        /**
         * Database encoding.
         * @type {string || null}
         */
        this.Charset = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.DbUser = null;

        /**
         * Password.
         * @type {string || null}
         */
        this.DbPwd = null;

        /**
         * Database name.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Database alias.
         * @type {string || null}
         */
        this.SourceName = null;

        /**
         * Data source ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Catalog value.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Third-party data source identifier.
         * @type {string || null}
         */
        this.DataOrigin = null;

        /**
         * Third-party project ID.
         * @type {string || null}
         */
        this.DataOriginProjectId = null;

        /**
         * Third-party data source ID.
         * @type {string || null}
         */
        this.DataOriginDatasourceId = null;

        /**
         * Extension parameter.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * Unified identifier of the Tencent Cloud VPC.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * VPC IP address.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * VPC port.
         * @type {string || null}
         */
        this.Vport = null;

        /**
         * Tencent Cloud VPC identifier.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Enable VPC.  
         * @type {boolean || null}
         */
        this.UseVPC = null;

        /**
         * Region.
         * @type {string || null}
         */
        this.RegionId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.DbHost = 'DbHost' in params ? params.DbHost : null;
        this.DbPort = 'DbPort' in params ? params.DbPort : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;
        this.DbType = 'DbType' in params ? params.DbType : null;
        this.Charset = 'Charset' in params ? params.Charset : null;
        this.DbUser = 'DbUser' in params ? params.DbUser : null;
        this.DbPwd = 'DbPwd' in params ? params.DbPwd : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SourceName = 'SourceName' in params ? params.SourceName : null;
        this.Id = 'Id' in params ? params.Id : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.DataOrigin = 'DataOrigin' in params ? params.DataOrigin : null;
        this.DataOriginProjectId = 'DataOriginProjectId' in params ? params.DataOriginProjectId : null;
        this.DataOriginDatasourceId = 'DataOriginDatasourceId' in params ? params.DataOriginDatasourceId : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.UseVPC = 'UseVPC' in params ? params.UseVPC : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

    }
}

/**
 * ModifyProject request structure.
 * @class
 */
class ModifyProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.

         * @type {number || null}
         */
        this.Id = null;

        /**
         * Name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Color value.
         * @type {string || null}
         */
        this.ColorCode = null;

        /**
         * Icon.
         * @type {string || null}
         */
        this.Logo = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Mark = null;

        /**
         * Available upon request.
         * @type {boolean || null}
         */
        this.IsApply = null;

        /**
         * Seed.
         * @type {string || null}
         */
        this.Seed = null;

        /**
         * Default dashboard.
         * @type {number || null}
         */
        this.DefaultPanelType = null;

        /**
         * 2
         * @type {string || null}
         */
        this.PanelScope = null;

        /**
         * Project management platform.
         * @type {string || null}
         */
        this.ManagePlatform = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ColorCode = 'ColorCode' in params ? params.ColorCode : null;
        this.Logo = 'Logo' in params ? params.Logo : null;
        this.Mark = 'Mark' in params ? params.Mark : null;
        this.IsApply = 'IsApply' in params ? params.IsApply : null;
        this.Seed = 'Seed' in params ? params.Seed : null;
        this.DefaultPanelType = 'DefaultPanelType' in params ? params.DefaultPanelType : null;
        this.PanelScope = 'PanelScope' in params ? params.PanelScope : null;
        this.ManagePlatform = 'ManagePlatform' in params ? params.ManagePlatform : null;

    }
}

/**
 * ModifyUserRoleProject request structure.
 * @class
 */
class ModifyUserRoleProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Role ID list.
         * @type {Array.<number> || null}
         */
        this.RoleIdList = null;

        /**
         * Mailbox.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * WeCom app user ID.
         * @type {string || null}
         */
        this.AppUserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.RoleIdList = 'RoleIdList' in params ? params.RoleIdList : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.AppUserId = 'AppUserId' in params ? params.AppUserId : null;

    }
}

/**
 * CreateUserRole response structure.
 * @class
 */
class CreateUserRoleResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DataId || null}
         */
        this.Data = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new DataId();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Token deferral request
 * @class
 */
class ApplyEmbedTokenInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Request result.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Result = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Result = 'Result' in params ? params.Result : null;

    }
}

/**
 * DescribeProjectList request structure.
 * @class
 */
class DescribeProjectListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Page capacity. The initial version defaults to 20 and may change dynamically based on screen width in the future.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Page marker.
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * Fuzzy search field.
         * @type {string || null}
         */
        this.Keyword = null;

        /**
         * Whether to display all. If true, ignore pagination.
         * @type {boolean || null}
         */
        this.AllPage = null;

        /**
         * Role information.
         * @type {string || null}
         */
        this.ModuleCollection = null;

        /**
         * moduleId set.
         * @type {Array.<string> || null}
         */
        this.ModuleIdList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;
        this.AllPage = 'AllPage' in params ? params.AllPage : null;
        this.ModuleCollection = 'ModuleCollection' in params ? params.ModuleCollection : null;
        this.ModuleIdList = 'ModuleIdList' in params ? params.ModuleIdList : null;

    }
}

/**
 * User role information
 * @class
 */
class UserRoleListDataUserRoleInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Business ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * This API is used to obtain the role list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserRoleListDataRoleInfo> || null}
         */
        this.RoleList = null;

        /**
         * Role ID list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<number> || null}
         */
        this.RoleIdList = null;

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Enterprise ID.
         * @type {string || null}
         */
        this.CorpId = null;

        /**
         * Email.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * Creator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedUser = null;

        /**
         * Creation time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Updater.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedUser = null;

        /**
         * Update time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Last login time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastLogin = null;

        /**
         * Account status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Mobile number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PhoneNumber = null;

        /**
         * Telephone country code.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AreaCode = null;

        /**
         * Whether it is the root account.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.RootAccount = null;

        /**
         * Whether it is an enterprise administrator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.CorpAdmin = null;

        /**
         * WeCom user ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserId = null;

        /**
         * Nickname.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserAliasName = null;

        /**
         * Application username.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserName = null;

        /**
         * Whether it is within the visible range.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.InValidateAppRange = null;

        /**
         * User openID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppOpenUserId = null;

        /**
         * Activation status of email.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EmailActivationStatus = null;

        /**
         * User group information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserGroupDTO> || null}
         */
        this.UserGroupList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;

        if (params.RoleList) {
            this.RoleList = new Array();
            for (let z in params.RoleList) {
                let obj = new UserRoleListDataRoleInfo();
                obj.deserialize(params.RoleList[z]);
                this.RoleList.push(obj);
            }
        }
        this.RoleIdList = 'RoleIdList' in params ? params.RoleIdList : null;
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.CorpId = 'CorpId' in params ? params.CorpId : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.CreatedUser = 'CreatedUser' in params ? params.CreatedUser : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedUser = 'UpdatedUser' in params ? params.UpdatedUser : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.LastLogin = 'LastLogin' in params ? params.LastLogin : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.PhoneNumber = 'PhoneNumber' in params ? params.PhoneNumber : null;
        this.AreaCode = 'AreaCode' in params ? params.AreaCode : null;
        this.RootAccount = 'RootAccount' in params ? params.RootAccount : null;
        this.CorpAdmin = 'CorpAdmin' in params ? params.CorpAdmin : null;
        this.AppUserId = 'AppUserId' in params ? params.AppUserId : null;
        this.AppUserAliasName = 'AppUserAliasName' in params ? params.AppUserAliasName : null;
        this.AppUserName = 'AppUserName' in params ? params.AppUserName : null;
        this.InValidateAppRange = 'InValidateAppRange' in params ? params.InValidateAppRange : null;
        this.AppOpenUserId = 'AppOpenUserId' in params ? params.AppOpenUserId : null;
        this.EmailActivationStatus = 'EmailActivationStatus' in params ? params.EmailActivationStatus : null;

        if (params.UserGroupList) {
            this.UserGroupList = new Array();
            for (let z in params.UserGroupList) {
                let obj = new UserGroupDTO();
                obj.deserialize(params.UserGroupList[z]);
                this.UserGroupList.push(obj);
            }
        }

    }
}

/**
 * User role information
 * @class
 */
class UserRoleListData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Total number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * Total number of pages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalPages = null;

        /**
         * List.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<UserRoleListDataUserRoleInfo> || null}
         */
        this.List = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.TotalPages = 'TotalPages' in params ? params.TotalPages : null;

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new UserRoleListDataUserRoleInfo();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }

    }
}

/**
 * Project description
 * @class
 */
class Project extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Project logo.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Logo = null;

        /**
         * Project name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Background color of the logo.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ColorCode = null;

        /**
         * Creator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedUser = null;

        /**
         * Creation time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Number of members.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.MemberCount = null;

        /**
         * Number of pages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.PageCount = null;

        /**
         * Last modified report and dashboard names.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastModifyName = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Source = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.Apply = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedUser = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CorpId = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Mark = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Seed = null;

        /**
         * Permission list in the project.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.AuthList = null;

        /**
         * Default dashboard.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PanelScope = null;

        /**
         * Whether it is managed.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.IsExternalManage = null;

        /**
         * Management platform name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ManagePlatform = null;

        /**
         * Customization parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<ProjectConfigList> || null}
         */
        this.ConfigList = null;

        /**
         * Creator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedUserName = null;

        /**
         * Associated person ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * Associated person.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OwnerName = null;

        /**
         * Number of dashboard pages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.NormalCount = null;

        /**
         * Number of free canvas pages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FreeCount = null;

        /**
         * Number of ad-hoc analysis pages.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.AdhocCount = null;

        /**
         * Number of pages in the briefing
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.BriefingCount = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.Logo = 'Logo' in params ? params.Logo : null;
        this.Name = 'Name' in params ? params.Name : null;
        this.ColorCode = 'ColorCode' in params ? params.ColorCode : null;
        this.CreatedUser = 'CreatedUser' in params ? params.CreatedUser : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.MemberCount = 'MemberCount' in params ? params.MemberCount : null;
        this.PageCount = 'PageCount' in params ? params.PageCount : null;
        this.LastModifyName = 'LastModifyName' in params ? params.LastModifyName : null;
        this.Source = 'Source' in params ? params.Source : null;
        this.Apply = 'Apply' in params ? params.Apply : null;
        this.UpdatedUser = 'UpdatedUser' in params ? params.UpdatedUser : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.CorpId = 'CorpId' in params ? params.CorpId : null;
        this.Mark = 'Mark' in params ? params.Mark : null;
        this.Seed = 'Seed' in params ? params.Seed : null;
        this.AuthList = 'AuthList' in params ? params.AuthList : null;
        this.PanelScope = 'PanelScope' in params ? params.PanelScope : null;
        this.IsExternalManage = 'IsExternalManage' in params ? params.IsExternalManage : null;
        this.ManagePlatform = 'ManagePlatform' in params ? params.ManagePlatform : null;

        if (params.ConfigList) {
            this.ConfigList = new Array();
            for (let z in params.ConfigList) {
                let obj = new ProjectConfigList();
                obj.deserialize(params.ConfigList[z]);
                this.ConfigList.push(obj);
            }
        }
        this.CreatedUserName = 'CreatedUserName' in params ? params.CreatedUserName : null;
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.OwnerName = 'OwnerName' in params ? params.OwnerName : null;
        this.NormalCount = 'NormalCount' in params ? params.NormalCount : null;
        this.FreeCount = 'FreeCount' in params ? params.FreeCount : null;
        this.AdhocCount = 'AdhocCount' in params ? params.AdhocCount : null;
        this.BriefingCount = 'BriefingCount' in params ? params.BriefingCount : null;

    }
}

/**
 * Data source details
 * @class
 */
class DatasourceInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * Database ID.
         * @type {number || null}
         */
        this.Id = null;

        /**
         * Database name.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Domain type. Valid values: 1: Tencent Cloud; 2: local.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * Database alias.
         * @type {string || null}
         */
        this.SourceName = null;

        /**
         * Database driver.
         * @type {string || null}
         */
        this.DbType = null;

        /**
         * HOST
         * @type {string || null}
         */
        this.DbHost = null;

        /**
         * Port.
         * @type {number || null}
         */
        this.DbPort = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.DbUser = null;

        /**
         * Database encoding.
         * @type {string || null}
         */
        this.Charset = null;

        /**
         * Creation time.

         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Modification time.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Creator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedUser = null;

        /**
         * Catalog value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Catalog = null;

        /**
         * Connection type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ConnectType = null;

        /**
         * Project ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Data source description.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Desc = null;

        /**
         * Data source status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Status = null;

        /**
         * Source platform.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.SourcePlat = null;

        /**
         * Extension parameter.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AddInfo = null;

        /**
         * Project name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectName = null;

        /**
         * Engine type.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.EngineType = null;

        /**
         * Data source owner.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Manager = null;

        /**
         * Operation personnel allowlist.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OperatorWhitelist = null;

        /**
         * VPC information of the data source.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * uniqVpc information of the data source.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * Data source region information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.RegionId = null;

        /**
         * Operation attributes.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {BaseStateAction || null}
         */
        this.StateAction = null;

        /**
         * Updater.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedUser = null;

        /**
         * Permission list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<PermissionGroup> || null}
         */
        this.PermissionList = null;

        /**
         * Permission value list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<string> || null}
         */
        this.AuthList = null;

        /**
         * Third-party data source identifier.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataOrigin = null;

        /**
         * Third-party project ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataOriginProjectId = null;

        /**
         * Third-party data source ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DataOriginDatasourceId = null;

        /**
         * Cluster ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * Data source name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.DbTypeName = null;

        /**
         * Enable VPC.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.UseVPC = null;

        /**
         * Associated person ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Owner = null;

        /**
         * Associated person name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.OwnerName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Id = 'Id' in params ? params.Id : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;
        this.SourceName = 'SourceName' in params ? params.SourceName : null;
        this.DbType = 'DbType' in params ? params.DbType : null;
        this.DbHost = 'DbHost' in params ? params.DbHost : null;
        this.DbPort = 'DbPort' in params ? params.DbPort : null;
        this.DbUser = 'DbUser' in params ? params.DbUser : null;
        this.Charset = 'Charset' in params ? params.Charset : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.CreatedUser = 'CreatedUser' in params ? params.CreatedUser : null;
        this.Catalog = 'Catalog' in params ? params.Catalog : null;
        this.ConnectType = 'ConnectType' in params ? params.ConnectType : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Desc = 'Desc' in params ? params.Desc : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.SourcePlat = 'SourcePlat' in params ? params.SourcePlat : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.AddInfo = 'AddInfo' in params ? params.AddInfo : null;
        this.ProjectName = 'ProjectName' in params ? params.ProjectName : null;
        this.EngineType = 'EngineType' in params ? params.EngineType : null;
        this.Manager = 'Manager' in params ? params.Manager : null;
        this.OperatorWhitelist = 'OperatorWhitelist' in params ? params.OperatorWhitelist : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;

        if (params.StateAction) {
            let obj = new BaseStateAction();
            obj.deserialize(params.StateAction)
            this.StateAction = obj;
        }
        this.UpdatedUser = 'UpdatedUser' in params ? params.UpdatedUser : null;

        if (params.PermissionList) {
            this.PermissionList = new Array();
            for (let z in params.PermissionList) {
                let obj = new PermissionGroup();
                obj.deserialize(params.PermissionList[z]);
                this.PermissionList.push(obj);
            }
        }
        this.AuthList = 'AuthList' in params ? params.AuthList : null;
        this.DataOrigin = 'DataOrigin' in params ? params.DataOrigin : null;
        this.DataOriginProjectId = 'DataOriginProjectId' in params ? params.DataOriginProjectId : null;
        this.DataOriginDatasourceId = 'DataOriginDatasourceId' in params ? params.DataOriginDatasourceId : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.DbTypeName = 'DbTypeName' in params ? params.DbTypeName : null;
        this.UseVPC = 'UseVPC' in params ? params.UseVPC : null;
        this.Owner = 'Owner' in params ? params.Owner : null;
        this.OwnerName = 'OwnerName' in params ? params.OwnerName : null;

    }
}

/**
 * DeleteUserRoleProject request structure.
 * @class
 */
class DeleteUserRoleProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.UserId = 'UserId' in params ? params.UserId : null;

    }
}

/**
 * CreateProject response structure.
 * @class
 */
class CreateProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Extra data.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.

         * @type {Data || null}
         */
        this.Data = null;

        /**
         * Returned information.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new Data();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DescribeProjectInfo response structure.
 * @class
 */
class DescribeProjectInfoResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * Project details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Project || null}
         */
        this.Data = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;

        if (params.Data) {
            let obj = new Project();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * ExportScreenPage request structure.
 * @class
 */
class ExportScreenPageRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Page ID.
         * @type {string || null}
         */
        this.PageId = null;

        /**
         * Canvas type. Grid canvas: GRID; Free canvas: FREE.
         * @type {string || null}
         */
        this.CanvasType = null;

        /**
         * Image export type. Valid values: Base64, and URL (valid period: 1 day).
         * @type {string || null}
         */
        this.PicType = null;

        /**
         * Component IDs. When empty, export the entire page.
         * @type {Array.<string> || null}
         */
        this.WidgetIds = null;

        /**
         * Whether it is an async request.
         * @type {boolean || null}
         */
        this.AsyncRequest = null;

        /**
         * Transaction ID.
         * @type {string || null}
         */
        this.TranId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.PageId = 'PageId' in params ? params.PageId : null;
        this.CanvasType = 'CanvasType' in params ? params.CanvasType : null;
        this.PicType = 'PicType' in params ? params.PicType : null;
        this.WidgetIds = 'WidgetIds' in params ? params.WidgetIds : null;
        this.AsyncRequest = 'AsyncRequest' in params ? params.AsyncRequest : null;
        this.TranId = 'TranId' in params ? params.TranId : null;

    }
}

/**
 * DescribeUserRoleList request structure.
 * @class
 */
class DescribeUserRoleListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Page number.
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * Number of pages.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * All page numbers.
         * @type {boolean || null}
         */
        this.AllPage = null;

        /**
         * 0: enterprise user. 1: visitor. If left blank, it indicates all users.
         * @type {string || null}
         */
        this.UserType = null;

        /**
         * Keyword for fuzzy search.
         * @type {string || null}
         */
        this.Keyword = null;

        /**
         * Project ID.

         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Whether to only obtain users bound to the WeCom app.
         * @type {boolean || null}
         */
        this.IsOnlyBindAppUser = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.AllPage = 'AllPage' in params ? params.AllPage : null;
        this.UserType = 'UserType' in params ? params.UserType : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.IsOnlyBindAppUser = 'IsOnlyBindAppUser' in params ? params.IsOnlyBindAppUser : null;

    }
}

/**
 * DeleteProject response structure.
 * @class
 */
class DeleteProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * "".
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * ""
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * Project list data
 * @class
 */
class ProjectListData extends  AbstractModel {
    constructor(){
        super();

        /**
         * Array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<Project> || null}
         */
        this.List = null;

        /**
         * Total number.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Total = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.TotalPages = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.List) {
            this.List = new Array();
            for (let z in params.List) {
                let obj = new Project();
                obj.deserialize(params.List[z]);
                this.List.push(obj);
            }
        }
        this.Total = 'Total' in params ? params.Total : null;
        this.TotalPages = 'TotalPages' in params ? params.TotalPages : null;

    }
}

/**
 * DescribeUserRoleProjectList request structure.
 * @class
 */
class DescribeUserRoleProjectListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Page number.
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * Number of pages.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Whether to only obtain users bound to the WeCom app.
         * @type {boolean || null}
         */
        this.IsOnlyBindAppUser = null;

        /**
         * Whether to obtain all the data.
         * @type {boolean || null}
         */
        this.AllPage = null;

        /**
         * Role code.
         * @type {string || null}
         */
        this.RoleCode = null;

        /**
         * User ID list.
         * @type {Array.<string> || null}
         */
        this.UserIdList = null;

        /**
         * Search keywords.
         * @type {string || null}
         */
        this.Keyword = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.IsOnlyBindAppUser = 'IsOnlyBindAppUser' in params ? params.IsOnlyBindAppUser : null;
        this.AllPage = 'AllPage' in params ? params.AllPage : null;
        this.RoleCode = 'RoleCode' in params ? params.RoleCode : null;
        this.UserIdList = 'UserIdList' in params ? params.UserIdList : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;

    }
}

/**
 * Commercial version permission grouping
 * @class
 */
class PermissionGroup extends  AbstractModel {
    constructor(){
        super();

        /**
         * Group name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModuleGroup = null;

        /**
         * Permission list.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<PermissionComponent> || null}
         */
        this.Components = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModuleGroup = 'ModuleGroup' in params ? params.ModuleGroup : null;

        if (params.Components) {
            this.Components = new Array();
            for (let z in params.Components) {
                let obj = new PermissionComponent();
                obj.deserialize(params.Components[z]);
                this.Components.push(obj);
            }
        }

    }
}

/**
 * CreateEmbedToken response structure.
 * @class
 */
class CreateEmbedTokenResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {EmbedTokenInfo || null}
         */
        this.Data = null;

        /**
         * Result description.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new EmbedTokenInfo();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateUserRoleProject request structure.
 * @class
 */
class CreateUserRoleProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project ID.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Role ID list.
         * @type {Array.<number> || null}
         */
        this.RoleIdList = null;

        /**
         * User list (deprecated).
         * @type {Array.<UserIdAndUserName> || null}
         */
        this.UserList = null;

        /**
         * User list (new).
         * @type {Array.<UserInfo> || null}
         */
        this.UserInfoList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.RoleIdList = 'RoleIdList' in params ? params.RoleIdList : null;

        if (params.UserList) {
            this.UserList = new Array();
            for (let z in params.UserList) {
                let obj = new UserIdAndUserName();
                obj.deserialize(params.UserList[z]);
                this.UserList.push(obj);
            }
        }

        if (params.UserInfoList) {
            this.UserInfoList = new Array();
            for (let z in params.UserInfoList) {
                let obj = new UserInfo();
                obj.deserialize(params.UserInfoList[z]);
                this.UserInfoList.push(obj);
            }
        }

    }
}

/**
 * Page component information
 * @class
 */
class WidgetListVO extends  AbstractModel {
    constructor(){
        super();

        /**
         * uin
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CorpId = null;

        /**
         * Project ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Page ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PageId = null;

        /**
         * Component array.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {Array.<WidgetVO> || null}
         */
        this.WidgetList = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.CorpId = 'CorpId' in params ? params.CorpId : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.PageId = 'PageId' in params ? params.PageId : null;

        if (params.WidgetList) {
            this.WidgetList = new Array();
            for (let z in params.WidgetList) {
                let obj = new WidgetVO();
                obj.deserialize(params.WidgetList[z]);
                this.WidgetList.push(obj);
            }
        }

    }
}

/**
 * Component information
 * @class
 */
class WidgetVO extends  AbstractModel {
    constructor(){
        super();

        /**
         * Component ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WidgetId = null;

        /**
         * Component name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.WidgetName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.WidgetId = 'WidgetId' in params ? params.WidgetId : null;
        this.WidgetName = 'WidgetName' in params ? params.WidgetName : null;

    }
}

/**
 * DescribeDatasourceList request structure.
 * @class
 */
class DescribeDatasourceListRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * None.
         * @type {number || null}
         */
        this.ProjectId = null;

        /**
         * Returns all pages and defaults to false.
         * @type {boolean || null}
         */
        this.AllPage = null;

        /**
         * Database name search.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * None.
         * @type {number || null}
         */
        this.PageNo = null;

        /**
         * None.
         * @type {number || null}
         */
        this.PageSize = null;

        /**
         * Search keywords.
         * @type {string || null}
         */
        this.Keyword = null;

        /**
         * Permission filter (0: all permissions, 1: access permission, 2: edit permission).
         * @type {number || null}
         */
        this.PermissionType = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.AllPage = 'AllPage' in params ? params.AllPage : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.PageNo = 'PageNo' in params ? params.PageNo : null;
        this.PageSize = 'PageSize' in params ? params.PageSize : null;
        this.Keyword = 'Keyword' in params ? params.Keyword : null;
        this.PermissionType = 'PermissionType' in params ? params.PermissionType : null;

    }
}

/**
 * ApplyEmbedInterval response structure.
 * @class
 */
class ApplyEmbedIntervalResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Additional parameters.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Result data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ApplyEmbedTokenInfo || null}
         */
        this.Data = null;

        /**
         * Result description.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;

        if (params.Data) {
            let obj = new ApplyEmbedTokenInfo();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDatasource response structure.
 * @class
 */
class CreateDatasourceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Data source ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {IdDTO || null}
         */
        this.Data = null;

        /**
         * Additional information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Prompt.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }

        if (params.Data) {
            let obj = new IdDTO();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * DeleteUserRoleProject response structure.
 * @class
 */
class DeleteUserRoleProjectResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Expansion.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Message.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Data = 'Data' in params ? params.Data : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateDatasourceCloud request structure.
 * @class
 */
class CreateDatasourceCloudRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * The backend provides dictionaries: domain type. 1. Tencent Cloud, 2. local.
         * @type {string || null}
         */
        this.ServiceType = null;

        /**
         * Drive.
         * @type {string || null}
         */
        this.DbType = null;

        /**
         * Database encoding.
         * @type {string || null}
         */
        this.Charset = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.DbUser = null;

        /**
         * Password.
         * @type {string || null}
         */
        this.DbPwd = null;

        /**
         * Database name.
         * @type {string || null}
         */
        this.DbName = null;

        /**
         * Database alias.
         * @type {string || null}
         */
        this.SourceName = null;

        /**
         * Project ID.
         * @type {string || null}
         */
        this.ProjectId = null;

        /**
         * Private network IP address of the public cloud.
         * @type {string || null}
         */
        this.Vip = null;

        /**
         * Private network port of the public cloud.
         * @type {string || null}
         */
        this.Vport = null;

        /**
         * VPC identifier.
         * @type {string || null}
         */
        this.VpcId = null;

        /**
         * Unified VPC identifier.
         * @type {string || null}
         */
        this.UniqVpcId = null;

        /**
         * Region identifier (gz, bj).
         * @type {string || null}
         */
        this.RegionId = null;

        /**
         * Extension parameter.
         * @type {string || null}
         */
        this.ExtraParam = null;

        /**
         * Instance ID.
         * @type {string || null}
         */
        this.InstanceId = null;

        /**
         * Product name of the data source.
         * @type {string || null}
         */
        this.ProdDbName = null;

        /**
         * Third-party data source identifier.
         * @type {string || null}
         */
        this.DataOrigin = null;

        /**
         * Third-party project ID.
         * @type {string || null}
         */
        this.DataOriginProjectId = null;

        /**
         * Third-party data source ID.
         * @type {string || null}
         */
        this.DataOriginDatasourceId = null;

        /**
         * Cluster ID.
         * @type {string || null}
         */
        this.ClusterId = null;

        /**
         * 
         * @type {string || null}
         */
        this.Schema = null;

        /**
         * 
         * @type {string || null}
         */
        this.DbVersion = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ServiceType = 'ServiceType' in params ? params.ServiceType : null;
        this.DbType = 'DbType' in params ? params.DbType : null;
        this.Charset = 'Charset' in params ? params.Charset : null;
        this.DbUser = 'DbUser' in params ? params.DbUser : null;
        this.DbPwd = 'DbPwd' in params ? params.DbPwd : null;
        this.DbName = 'DbName' in params ? params.DbName : null;
        this.SourceName = 'SourceName' in params ? params.SourceName : null;
        this.ProjectId = 'ProjectId' in params ? params.ProjectId : null;
        this.Vip = 'Vip' in params ? params.Vip : null;
        this.Vport = 'Vport' in params ? params.Vport : null;
        this.VpcId = 'VpcId' in params ? params.VpcId : null;
        this.UniqVpcId = 'UniqVpcId' in params ? params.UniqVpcId : null;
        this.RegionId = 'RegionId' in params ? params.RegionId : null;
        this.ExtraParam = 'ExtraParam' in params ? params.ExtraParam : null;
        this.InstanceId = 'InstanceId' in params ? params.InstanceId : null;
        this.ProdDbName = 'ProdDbName' in params ? params.ProdDbName : null;
        this.DataOrigin = 'DataOrigin' in params ? params.DataOrigin : null;
        this.DataOriginProjectId = 'DataOriginProjectId' in params ? params.DataOriginProjectId : null;
        this.DataOriginDatasourceId = 'DataOriginDatasourceId' in params ? params.DataOriginDatasourceId : null;
        this.ClusterId = 'ClusterId' in params ? params.ClusterId : null;
        this.Schema = 'Schema' in params ? params.Schema : null;
        this.DbVersion = 'DbVersion' in params ? params.DbVersion : null;

    }
}

/**
 * User ID and username
 * @class
 */
class UserInfo extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Email.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * Mobile number.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PhoneNumber = null;

        /**
         * Telephone country code.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AreaCode = null;

        /**
         * WeCom account ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserId = null;

        /**
         * WeCom account name.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserName = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.PhoneNumber = 'PhoneNumber' in params ? params.PhoneNumber : null;
        this.AreaCode = 'AreaCode' in params ? params.AreaCode : null;
        this.AppUserId = 'AppUserId' in params ? params.AppUserId : null;
        this.AppUserName = 'AppUserName' in params ? params.AppUserName : null;

    }
}

/**
 * DescribeDatasourceList response structure.
 * @class
 */
class DescribeDatasourceListResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * List details.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {DatasourceInfoData || null}
         */
        this.Data = null;

        /**
         * Information.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Information.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }

        if (params.Data) {
            let obj = new DatasourceInfoData();
            obj.deserialize(params.Data)
            this.Data = obj;
        }
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * User ID and username
 * @class
 */
class UserIdAndUserName extends  AbstractModel {
    constructor(){
        super();

        /**
         * User ID.
         * @type {string || null}
         */
        this.UserId = null;

        /**
         * Username.
         * @type {string || null}
         */
        this.UserName = null;

        /**
         * Enterprise ID.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CorpId = null;

        /**
         * Email.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Email = null;

        /**
         * Last login time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.LastLogin = null;

        /**
         * Enabled/Disabled status.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Status = null;

        /**
         * Whether to change the password during the first-time login.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.FirstModify = null;

        /**
         * Mobile number.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.PhoneNumber = null;

        /**
         * Telephone country code.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AreaCode = null;

        /**
         * Creator.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedUser = null;

        /**
         * Creation time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.CreatedAt = null;

        /**
         * Modifier.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedUser = null;

        /**
         * Change time.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpdatedAt = null;

        /**
         * Global role.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GlobalUserName = null;

        /**
         * Global role code.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.GlobalUserCode = null;

        /**
         * Mobile number.

Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Mobile = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppId = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserId = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserAliasName = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.AppUserName = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {boolean || null}
         */
        this.InValidateAppRange = null;

        /**
         *  -1: No activation required. 0: Inactivated. 1: Activated. Null value represents pending binding.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.EmailActivationStatus = null;

        /**
         * 1
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {number || null}
         */
        this.Id = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.UserId = 'UserId' in params ? params.UserId : null;
        this.UserName = 'UserName' in params ? params.UserName : null;
        this.CorpId = 'CorpId' in params ? params.CorpId : null;
        this.Email = 'Email' in params ? params.Email : null;
        this.LastLogin = 'LastLogin' in params ? params.LastLogin : null;
        this.Status = 'Status' in params ? params.Status : null;
        this.FirstModify = 'FirstModify' in params ? params.FirstModify : null;
        this.PhoneNumber = 'PhoneNumber' in params ? params.PhoneNumber : null;
        this.AreaCode = 'AreaCode' in params ? params.AreaCode : null;
        this.CreatedUser = 'CreatedUser' in params ? params.CreatedUser : null;
        this.CreatedAt = 'CreatedAt' in params ? params.CreatedAt : null;
        this.UpdatedUser = 'UpdatedUser' in params ? params.UpdatedUser : null;
        this.UpdatedAt = 'UpdatedAt' in params ? params.UpdatedAt : null;
        this.GlobalUserName = 'GlobalUserName' in params ? params.GlobalUserName : null;
        this.GlobalUserCode = 'GlobalUserCode' in params ? params.GlobalUserCode : null;
        this.Mobile = 'Mobile' in params ? params.Mobile : null;
        this.AppId = 'AppId' in params ? params.AppId : null;
        this.AppUserId = 'AppUserId' in params ? params.AppUserId : null;
        this.AppUserAliasName = 'AppUserAliasName' in params ? params.AppUserAliasName : null;
        this.AppUserName = 'AppUserName' in params ? params.AppUserName : null;
        this.InValidateAppRange = 'InValidateAppRange' in params ? params.InValidateAppRange : null;
        this.EmailActivationStatus = 'EmailActivationStatus' in params ? params.EmailActivationStatus : null;
        this.Id = 'Id' in params ? params.Id : null;

    }
}

/**
 * DeleteDatasource response structure.
 * @class
 */
class DeleteDatasourceResponse extends  AbstractModel {
    constructor(){
        super();

        /**
         * Custom error information object.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {ErrorInfo || null}
         */
        this.ErrorInfo = null;

        /**
         * Data.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Data = null;

        /**
         * Expansion.
         * @type {string || null}
         */
        this.Extra = null;

        /**
         * Information.
         * @type {string || null}
         */
        this.Msg = null;

        /**
         * The unique request ID, generated by the server, will be returned for every request (if the request fails to reach the server for other reasons, the request will not obtain a RequestId). RequestId is required for locating a problem.
         * @type {string || null}
         */
        this.RequestId = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }

        if (params.ErrorInfo) {
            let obj = new ErrorInfo();
            obj.deserialize(params.ErrorInfo)
            this.ErrorInfo = obj;
        }
        this.Data = 'Data' in params ? params.Data : null;
        this.Extra = 'Extra' in params ? params.Extra : null;
        this.Msg = 'Msg' in params ? params.Msg : null;
        this.RequestId = 'RequestId' in params ? params.RequestId : null;

    }
}

/**
 * CreateProject request structure.
 * @class
 */
class CreateProjectRequest extends  AbstractModel {
    constructor(){
        super();

        /**
         * Project name.
         * @type {string || null}
         */
        this.Name = null;

        /**
         * Background color of the logo.
         * @type {string || null}
         */
        this.ColorCode = null;

        /**
         * Project logo.
         * @type {string || null}
         */
        this.Logo = null;

        /**
         * Remarks.
         * @type {string || null}
         */
        this.Mark = null;

        /**
         * Whether to allow user requests.
         * @type {boolean || null}
         */
        this.IsApply = null;

        /**
         * Default dashboard.
         * @type {number || null}
         */
        this.DefaultPanelType = null;

        /**
         * Management platform.
         * @type {string || null}
         */
        this.ManagePlatform = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.Name = 'Name' in params ? params.Name : null;
        this.ColorCode = 'ColorCode' in params ? params.ColorCode : null;
        this.Logo = 'Logo' in params ? params.Logo : null;
        this.Mark = 'Mark' in params ? params.Mark : null;
        this.IsApply = 'IsApply' in params ? params.IsApply : null;
        this.DefaultPanelType = 'DefaultPanelType' in params ? params.DefaultPanelType : null;
        this.ManagePlatform = 'ManagePlatform' in params ? params.ManagePlatform : null;

    }
}

/**
 * Business edition permission unit
 * @class
 */
class PermissionComponent extends  AbstractModel {
    constructor(){
        super();

        /**
         * Permission value.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.ModuleId = null;

        /**
         * Visible/Available.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.IncludeType = null;

        /**
         * Target upgrade version.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.UpgradeVersionType = null;

        /**
         * Supplemental information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.Tips = null;

        /**
         * Key for supplementary information.
Note: This field may return null, indicating that no valid values can be obtained.
         * @type {string || null}
         */
        this.TipsKey = null;

    }

    /**
     * @private
     */
    deserialize(params) {
        if (!params) {
            return;
        }
        this.ModuleId = 'ModuleId' in params ? params.ModuleId : null;
        this.IncludeType = 'IncludeType' in params ? params.IncludeType : null;
        this.UpgradeVersionType = 'UpgradeVersionType' in params ? params.UpgradeVersionType : null;
        this.Tips = 'Tips' in params ? params.Tips : null;
        this.TipsKey = 'TipsKey' in params ? params.TipsKey : null;

    }
}

module.exports = {
    PageScreenVO: PageScreenVO,
    DataId: DataId,
    DescribeUserRoleListResponse: DescribeUserRoleListResponse,
    ExportScreenPageResponse: ExportScreenPageResponse,
    ModifyProjectResponse: ModifyProjectResponse,
    DeleteProjectRequest: DeleteProjectRequest,
    DescribeUserProjectListResponse: DescribeUserProjectListResponse,
    CreateDatasourceRequest: CreateDatasourceRequest,
    DeleteDatasourceRequest: DeleteDatasourceRequest,
    ModifyDatasourceResponse: ModifyDatasourceResponse,
    UserRoleListDataRoleInfo: UserRoleListDataRoleInfo,
    ApplyEmbedIntervalRequest: ApplyEmbedIntervalRequest,
    ProjectConfigResult: ProjectConfigResult,
    EmbedTokenInfo: EmbedTokenInfo,
    DescribePageWidgetListResponse: DescribePageWidgetListResponse,
    DeleteUserRoleResponse: DeleteUserRoleResponse,
    ErrorInfo: ErrorInfo,
    DescribeUserProjectListRequest: DescribeUserProjectListRequest,
    DescribePageWidgetListRequest: DescribePageWidgetListRequest,
    CreateDatasourceCloudResponse: CreateDatasourceCloudResponse,
    ProjectConfigList: ProjectConfigList,
    DeleteUserRoleRequest: DeleteUserRoleRequest,
    CreateUserRoleRequest: CreateUserRoleRequest,
    UserGroupDTO: UserGroupDTO,
    ModifyUserRoleRequest: ModifyUserRoleRequest,
    DatasourceInfoData: DatasourceInfoData,
    DescribeProjectListResponse: DescribeProjectListResponse,
    CorpUserListData: CorpUserListData,
    IdDTO: IdDTO,
    ModifyUserRoleResponse: ModifyUserRoleResponse,
    CreateEmbedTokenRequest: CreateEmbedTokenRequest,
    CreateUserRoleProjectResponse: CreateUserRoleProjectResponse,
    PageScreenListVO: PageScreenListVO,
    DescribeProjectInfoRequest: DescribeProjectInfoRequest,
    BaseStateAction: BaseStateAction,
    Data: Data,
    ModifyUserRoleProjectResponse: ModifyUserRoleProjectResponse,
    DescribeUserRoleProjectListResponse: DescribeUserRoleProjectListResponse,
    ModifyDatasourceCloudResponse: ModifyDatasourceCloudResponse,
    ModifyDatasourceCloudRequest: ModifyDatasourceCloudRequest,
    ModifyDatasourceRequest: ModifyDatasourceRequest,
    ModifyProjectRequest: ModifyProjectRequest,
    ModifyUserRoleProjectRequest: ModifyUserRoleProjectRequest,
    CreateUserRoleResponse: CreateUserRoleResponse,
    ApplyEmbedTokenInfo: ApplyEmbedTokenInfo,
    DescribeProjectListRequest: DescribeProjectListRequest,
    UserRoleListDataUserRoleInfo: UserRoleListDataUserRoleInfo,
    UserRoleListData: UserRoleListData,
    Project: Project,
    DatasourceInfo: DatasourceInfo,
    DeleteUserRoleProjectRequest: DeleteUserRoleProjectRequest,
    CreateProjectResponse: CreateProjectResponse,
    DescribeProjectInfoResponse: DescribeProjectInfoResponse,
    ExportScreenPageRequest: ExportScreenPageRequest,
    DescribeUserRoleListRequest: DescribeUserRoleListRequest,
    DeleteProjectResponse: DeleteProjectResponse,
    ProjectListData: ProjectListData,
    DescribeUserRoleProjectListRequest: DescribeUserRoleProjectListRequest,
    PermissionGroup: PermissionGroup,
    CreateEmbedTokenResponse: CreateEmbedTokenResponse,
    CreateUserRoleProjectRequest: CreateUserRoleProjectRequest,
    WidgetListVO: WidgetListVO,
    WidgetVO: WidgetVO,
    DescribeDatasourceListRequest: DescribeDatasourceListRequest,
    ApplyEmbedIntervalResponse: ApplyEmbedIntervalResponse,
    CreateDatasourceResponse: CreateDatasourceResponse,
    DeleteUserRoleProjectResponse: DeleteUserRoleProjectResponse,
    CreateDatasourceCloudRequest: CreateDatasourceCloudRequest,
    UserInfo: UserInfo,
    DescribeDatasourceListResponse: DescribeDatasourceListResponse,
    UserIdAndUserName: UserIdAndUserName,
    DeleteDatasourceResponse: DeleteDatasourceResponse,
    CreateProjectRequest: CreateProjectRequest,
    PermissionComponent: PermissionComponent,

}
